package com.docmgmt.mvp.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

/**
 * <p>
 * 知识库定义表（v3.0重构为3层架构：personal/department/company）
 * </p>
 *
 * @author Dora
 */
@Getter
@Setter
@Accessors(chain = true)
@TableName("knowledge_base")
public class KnowledgeBaseEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 知识库ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 知识库名称
     */
    @TableField("kb_name")
    private String kbName;

    /**
     * 知识库类型（v3.0改为ENUM）
     */
    @TableField("kb_type")
    private String kbType;

    /**
     * 创建者/所有者ID
     */
    @TableField("owner_id")
    private Long ownerId;

    /**
     * 所属部门ID（v3.0新增，department类型必填）
     */
    @TableField("dept_id")
    private Long deptId;

    /**
     * RAGFlow物理知识库ID（v3.0统一为company_main_kb）
     */
    @TableField("ragflow_kb_id")
    private String ragflowKbId;

    /**
     * 知识库描述
     */
    @TableField("description")
    private String description;

    /**
     * 状态：active/archived/deleted/pending_transfer
     */
    @TableField("status")
    private String status;

    /**
     * 转移前的owner_id（v3.0离职转移场景）
     */
    @TableField("transferred_from")
    private Long transferredFrom;

    /**
     * 转移时间（v3.0新增）
     */
    @TableField("transferred_at")
    private LocalDateTime transferredAt;

    /**
     * 执行转移的管理员ID（v3.0新增）
     */
    @TableField("transferred_by")
    private Long transferredBy;

    /**
     * 创建人ID
     */
    @TableField("created_by")
    private Long createdBy;

    @TableField(value = "created_at", fill = FieldFill.INSERT)
    private LocalDateTime createdAt;

    @TableField(value = "updated_at", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;
}
